﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Text.RegularExpressions;

namespace Negocio
{
    public static class ControladorReceta
    {
        public static List<Usada> RecetasMasUsadas()
        {
            List<Receta> todas = new List<Receta>();
            List<Usada> usadas = new List<Usada>();
            todas = AccesoDatos.BDReceta.ObtenerRecetas();
            if (todas != null)
            {                                   
                int cont = 0;
                foreach (Receta r in todas)
                {
                    if (cont < 10)
                    {
                        Usada u = new Usada { NombreReceta=r.Nombre,VecesUsada=r.Usadas};
                        usadas.Add(u);
                        cont++;
                    }
                    else
                        break;

                }
            }
            return usadas;
        }
        public static string ValidarReceta(string comensales, string dificultad, string procedimiento, string nombre, string tiempo, List<Ingrediente> ingredientes)
        {
            if (string.IsNullOrEmpty(comensales) || string.IsNullOrEmpty(dificultad) || string.IsNullOrEmpty(procedimiento) || string.IsNullOrEmpty(nombre) || string.IsNullOrEmpty(tiempo) || ingredientes.Count == 0)
            {
                return "Todos los campos son necesarios";
            }
            else 
            {
                string patron = @"^[a-zA-Z ]*$";
                if (!Regex.IsMatch(nombre, patron))
                    return "Nombre receta incorrecto";
                patron = @"^[0-9,. ]*$";
                if (!Regex.IsMatch(comensales, patron))
                    return "campo comensales llenado incorrectamente incorrecto";
                if (!Regex.IsMatch(dificultad, patron))
                    return "campo dificultad llenado incorrectamente incorrecto";
                if (!Regex.IsMatch(tiempo, patron))
                    return "campo tiempo llenado incorrectamente incorrecto";
                return null;
             }
        }

        public static string RegistrarReceta(string comensales, string dificultad, string procedimiento, string nombre, string tiempo, List<Ingrediente> ingredientes)
        {
            string mensaje=ValidarReceta(comensales,dificultad,procedimiento,nombre,tiempo,ingredientes);
            if(mensaje==null)
            {
                if (AccesoDatos.BDReceta.RegistrarReceta(float.Parse(comensales), Convert.ToInt32(dificultad), procedimiento, nombre, float.Parse(tiempo), ingredientes))
                    return "Receta registrada";
                else
                    return "Error al registrar receta";
            }
            else
                return mensaje;
            
        }

        public static string ModificarReceta(string comensales, string dificultad, string procedimiento, string nombre, string tiempo, List<Ingrediente> ingredientes,int usadas)
        {
            string mensaje=ValidarReceta(comensales,dificultad,procedimiento,nombre,tiempo,ingredientes);
            if(mensaje==null)
            {
                if (AccesoDatos.BDReceta.ModificarReceta(float.Parse(comensales), Convert.ToInt32(dificultad), procedimiento, nombre, float.Parse(tiempo), ingredientes))
                    return "Receta modificada";
                else
                    return "Error al modificar receta";
            }
            else
                return mensaje;
            
        }

        public static Receta ObtenerReceta(string nombre)
        {
            return AccesoDatos.BDReceta.ObtenerReceta(nombre);
        }

        public static List<Receta> Recetas()
        {
            return AccesoDatos.BDReceta.Recetas();
        }

        public static bool EliminarReceta(string NombreReceta)
        {
            return AccesoDatos.BDReceta.EliminarReceta(NombreReceta);
        }

        public static List<Receta> FiltrarBuscadas(List<Receta> todas,string palabra)
        {
            List<Receta> filtradas = new List<Receta>();
            palabra = palabra.ToLower();
            string nombre, procedimiento;
            foreach (Receta receta in todas)
            {
                nombre = receta.Nombre.ToLower();
                procedimiento = receta.Procedimiento.ToLower();
                if (nombre.Contains(palabra) || procedimiento.Contains(palabra))
                    filtradas.Add(receta);
            }
            return filtradas;
        }

        public static List<Receta> buscadas(string palabra)
        {
            List<Receta> todas = AccesoDatos.BDReceta.Recetas();
            return FiltrarBuscadas(todas, palabra);
        }

        public static List<Receta> MasUsadas()
        {
            List<Receta> todas = AccesoDatos.BDReceta.Recetas();
            todas.Sort();
            return todas;
        }
    }
}
